一般大家熟悉使用 ps aux | grep process-name
這樣的方式來查找出process 對應的 pid.
其實Linux有提供一個 pgrep,可以更方便的找出pid.
例如:
pgrep firefox
3643
pgrep mysql
2038
2449
上面mysql 有兩個,我們可以使用 -l參數
pgrep -l mysql
2038 mysqld_safe
2449 mysqld
這樣就能區分mysqld_safe與mysqld
也可以更詳細一點
pgrep -lf mysql
2038 /bin/sh /usr/bin/mysqld_safe --datadir=/var/lib/mysql --socket=/var/lib/mysql/mysql.sock --pid-file=/var/run/mysqld/mysqld.pid --basedir=/usr --user=mysql
2449 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib64/mysql/plugin --user=mysql --log-error=/var/log/mysqld.log --pid-file=/var/run/mysqld/mysqld.pid --socket=/var/lib/mysql/mysql.sock --port=3306
也可以指定user,例如
pgrep -u root -lf ssh
1998 /usr/sbin/sshd
現在能方便查找出pid,接著來看一下應用方式.
為了說明起見,我另外開了終端機,登入MySQL.
使用pmap 查看 MySQL記憶體使用情況:
pmap `pgrep mysql`
2038: /bin/sh /usr/bin/mysqld_safe --datadir=/var/lib/mysql --socket=/var/lib/mysql/mysql.sock --pid-file=/var/run/mysqld/mysqld.pid --basedir=/usr --user=mysql
total 0K
2449: /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib64/mysql/plugin --user=mysql --log-error=/var/log/mysqld.log --pid-file=/var/run/mysqld/mysqld.pid --socket=/var/lib/mysql/mysql.sock --port=3306
total 0K
10140: mysql -u julia -p julia
0000000000400000 3100K r-x-- /usr/bin/mysql
0000000000907000 884K rw--- /usr/bin/mysql
00000000009e4000 44K rw--- [ anon ]
0000000000be3000 12K rw--- /usr/bin/mysql
0000000000ea9000 1876K rw--- [ anon ]
0000003c67400000 128K r-x-- /lib64/ld-2.12.so
0000003c6761f000 4K r---- /lib64/ld-2.12.so
0000003c67620000 4K rw--- /lib64/ld-2.12.so
0000003c67621000 4K rw--- [ anon ]
0000003c67800000 1576K r-x-- /lib64/libc-2.12.so
0000003c6798a000 2048K ----- /lib64/libc-2.12.so
0000003c67b8a000 16K r---- /lib64/libc-2.12.so
0000003c67b8e000 4K rw--- /lib64/libc-2.12.so
0000003c67b8f000 20K rw--- [ anon ]
0000003c67c00000 8K r-x-- /lib64/libdl-2.12.so
0000003c67c02000 2048K ----- /lib64/libdl-2.12.so
0000003c67e02000 4K r---- /lib64/libdl-2.12.so
0000003c67e03000 4K rw--- /lib64/libdl-2.12.so
0000003c68000000 92K r-x-- /lib64/libpthread-2.12.so
0000003c68017000 2048K ----- /lib64/libpthread-2.12.so
0000003c68217000 4K r---- /lib64/libpthread-2.12.so
0000003c68218000 4K rw--- /lib64/libpthread-2.12.so
0000003c68219000 16K rw--- [ anon ]
0000003c68400000 524K r-x-- /lib64/libm-2.12.so
0000003c68483000 2044K ----- /lib64/libm-2.12.so
0000003c68682000 4K r---- /lib64/libm-2.12.so
0000003c68683000 4K rw--- /lib64/libm-2.12.so
0000003c68c00000 28K r-x-- /lib64/librt-2.12.so
0000003c68c07000 2044K ----- /lib64/librt-2.12.so
0000003c68e06000 4K r---- /lib64/librt-2.12.so
0000003c68e07000 4K rw--- /lib64/librt-2.12.so
0000003c6c000000 88K r-x-- /lib64/libgcc_s-4.4.7-20120601.so.1
0000003c6c016000 2044K ----- /lib64/libgcc_s-4.4.7-20120601.so.1
0000003c6c215000 4K rw--- /lib64/libgcc_s-4.4.7-20120601.so.1
0000003c6ec00000 928K r-x-- /usr/lib64/libstdc++.so.6.0.13
0000003c6ece8000 2048K ----- /usr/lib64/libstdc++.so.6.0.13
0000003c6eee8000 28K r---- /usr/lib64/libstdc++.so.6.0.13
0000003c6eeef000 8K rw--- /usr/lib64/libstdc++.so.6.0.13
0000003c6eef1000 84K rw--- [ anon ]
0000003c77c00000 136K r-x-- /lib64/libncurses.so.5.7
0000003c77c22000 2044K ----- /lib64/libncurses.so.5.7
0000003c77e21000 4K rw--- /lib64/libncurses.so.5.7
0000003c79000000 116K r-x-- /lib64/libtinfo.so.5.7
0000003c7901d000 2048K ----- /lib64/libtinfo.so.5.7
0000003c7921d000 16K rw--- /lib64/libtinfo.so.5.7
00007f13aaade000 96828K r---- /usr/lib/locale/locale-archive
00007f13b096d000 48K r-x-- /lib64/libnss_files-2.12.so
00007f13b0979000 2048K ----- /lib64/libnss_files-2.12.so
00007f13b0b79000 4K r---- /lib64/libnss_files-2.12.so
00007f13b0b7a000 4K rw--- /lib64/libnss_files-2.12.so
00007f13b0b7b000 24K rw--- [ anon ]
00007f13b0ba1000 28K r--s- /usr/lib64/gconv/gconv-modules.cache
00007f13b0ba8000 8K rw--- [ anon ]
00007fff925a6000 84K rw--- [ stack ]
00007fff925c5000 4K r-x-- [ anon ]
ffffffffff600000 4K r-x-- [ anon ]
total 127284K
pid 10140 負責與登入的Client溝通,記憶體使用情形如上.
但是上面的指令把原本的mysqld_safe與mysqld,也一併列出,
我們可以使用 -n 參數,找出最新的.
pmap `pgrep -n mysql`
因為內容與上面部份重複,結果不列出.
pgrep 還可以搭配htop,或是top使用.
例如我們只要專注mysql,這是看最新的mysql
htop -p `pgrep -n mysql`
結果如:
或是可以看目前所有的mysql
htop -p $(pgrep -d ' -p ' mysql)
結果如:
top的方式類似
top -p $(pgrep -d ' -p ' mysql)
結果如圖:
指令搭配使用,更有彈性,方便.